草庐IT

java outOfMemoryError 与 stringbuilder

全部标签

c# - 为什么 StringBuilder 比字符串连接慢?

为什么StringBuilder比+连接更慢?StringBuilder旨在避免创建额外的对象,但为什么会降低性能?staticvoidMain(string[]args){intmax=1000000;for(inttimes=0;times编辑:按照建议移出范围变量: 最佳答案 更改以便StringBuilder不会一直实例化,而是.Clear()它:time:1String+:3348msStringBuilder:3151mstime:2String+:3346msStringBuilder:3050ms等请注意,这仍然会测

c# - StringBuilder.ToString() 抛出 OutOfMemoryException

我创建了一个长度为“132370292”的StringBuilder,当我尝试使用ToString()方法获取字符串时,它抛出OutOfMemoryException.StringBuilderSB=newStringBuilder();for(inti=0;i创建新字符串时OOM的原因是什么?为什么在写入文件时不会抛出OOM?机器详细信息:64位、Windows-7、2GBRAM、.NET2.0版 最佳答案 WhatisthereasonfortheOOMwhilecreatinganewstring因为内存不足-或者至少,CLR

c# - StringBuilder 是否比 String 连接使用更多的内存?

我知道在C#中使用StringBuilder有明显的性能优势,但内存差异是什么?StringBuilder是否使用更多内存?附带说明一下,stringbuilder本质上有哪些不同之处使其速度如此之快? 最佳答案 简短回答:StringBuilder适用于连接任意数量的字符串的情况,而这些字符串在编译时是未知的。如果您确实知道在编译时要组合哪些字符串,StringBuilder基本上毫无意义,因为您不需要它的动态调整大小功能。示例1:您想组合“猫”、“狗”和“老鼠”。这正好是11个字符。您可以简单地分配一个长度为11的char[]数

c# - .NET StringBuilder - 检查是否以字符串结尾

检查StringBuilder是否最好(最短和最快)的方法是什么?以特定字符串结尾?如果我只想检查一个字符,那不是问题sb[sb.Length-1]=='c',但如何检查它是否以更长的字符串结尾?我可以考虑从"somestring".Length开始循环并一个一个地阅读字符,但也许存在更简单的东西?:)最后我想要这样的扩展方法:StringBuildersb=newStringBuilder("Helloworld");boolhasString=sb.EndsWith("world"); 最佳答案 为避免生成完整字符串的性能开销,

c# - 如果 StringBuilder 是可变的,那么为什么 StringBuilder 方法返回一个 StringBuilder 对象?

我们都知道字符串是不可变的而StringBuilder是可变的。正确的。那么为什么它的方法会返回一个StringBuilder对象。它们不应该都是void方法吗?为什么会这样publicStringBuilderAppend(boolvalue)而不是publicvoidAppend(boolvalue)任何解释这个用法的例子都会很棒。 最佳答案 它叫做"fluentinterface".它允许您通过重复的点符号将调用链接在一起。returnnewStringBuilder().Append("Hello,").Append("wo

c# - 字符串连接是否在内部使用 StringBuilder?

我的三个同事刚刚告诉我,没有理由使用StringBuilder来代替使用+运算符的连接。换句话说,这可以处理一堆字符串:myString1+myString2+myString3+myString4+mySt...他们使用的基本原理是,从.NET2开始,如果您使用+运算符,C#编译器将构建相同的IL,就像您使用StringBuilder一样。这对我来说是个新闻。它们正确吗? 最佳答案 不,它们不正确。字符串连接创建一个新的string而StringBuilder使用可变大小的缓冲区来构建字符串,仅在ToString()时创建一个st

c# - StringBuilder 中最快的搜索方法

我有一个名为stb_Swap_Tabu的StringBuilder用于存储类(class)名称,我正在使用以下方法查找类(class):stb_Swap_Tabu.ToString.Contains("CourseName")就我而言,性能是最重要的问题。有没有更快的方法? 最佳答案 StringBuilder并非真正用于所有字符串目的。如果你真的需要搜索一个,你必须自己写一个方法。有几种适合不同情况的字符串搜索算法。以下是Knuth–Morris–Pratt算法的一个简单实现,它只关心顺序匹配(没有大小写折叠,没有与文化相关的排序

c# - 是否需要在替换 StringBuilder 中的字符串之前进行检查(使用 "Contains"或 "IndexOf"等函数)?

C#中是否有IndexOf或Contains方法。下面是代码:varsb=newStringBuilder(mystring);sb.Replace("abc","a");stringdateFormatString=sb.ToString();if(sb.ToString().Contains("def")){sb.Replace("def","aa");}if(sb.ToString().Contains("ghi")){sb.Replace("ghi","assd");}正如您可能已经注意到的那样,我在上面一次又一次地使用ToString(),我想避免这种情况,因为它每次都会创建

c# - stringbuilder 与字符串连接

在我的项目中,我正在遍历数据View结果。stringhtml=string.empty;DataViewdV=data.DefaultView;for(inti=0;idV中的行数将始终为3或4。对于这种情况,使用字符串concat+=opearator还是StringBuilder更好,为什么? 最佳答案 我会在这里使用StringBuilder,因为它描述了您正在做的事情。对于3或4个字符串的简单连接,它可能不会产生任何显着差异,并且字符串连接可能甚至会稍微快一些-但如果你错了并且有很多行,StringBuilder将开始变得

c# - StringBuilder 和字符串相等性检查

当System.Console.WriteLine(s==t);返回false时,我正在尝试此代码示例和OpTest。有人可以解释一下吗?publicstaticvoidOpTest(Ts,Tt)whereT:class{System.Console.WriteLine(s==t);}staticvoidMain(){strings1="строка";System.Text.StringBuildersb=newSystem.Text.StringBuilder(s1);System.Console.Write(sb);strings2=sb.ToString();OpTest(s1